package br.ufg.inf.musica;

import br.ufg.inf.tag.Tag;
import br.ufg.inf.tag.TagDAO;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MusicaController {

    /**
     * Metodo para cadastrar no bando de dados uma musica e sua respectiva tag
     *
     * @param req
     * @author Robson Vieira
     * @param res
     */
    public void cadastrar(HttpServletRequest req, HttpServletResponse res) throws Exception {
        RequestDispatcher rd = null;

        Musica musica = new Musica();
        try {
            //Efetua validações
            
            if (req.getParameter("tag_nome").equals("")) {
                throw new Exception("Insira ao menos uma tag");
            }else if (req.getParameter("nome").equals("")) {
                throw new Exception("Por favor, preencha o nome da música");
            } else if (req.getParameter("artista").equals("")) {
                throw new Exception("Por favor, preencha o artista");
            } else if (req.getParameter("genero").equals("")) {
                throw new Exception("Por favor, preencha o gênero da música");
            } else if (req.getParameter("url_youtube").equals("")) {
                throw new Exception("Por favor, insira a URL do Youtube");
            }

            /*Cadastrar musica no banco*/

            //Obtem apenas o código da música
            String[] url_aux = req.getParameter("url_youtube").split("v=");
            if(url_aux.length<=0){
                 throw new Exception("Insira a URL do Youtube valida");
            }
            
            String url_youtube = url_aux[1];
            
            //Popula objeto
            musica.setUrlYoutube(url_youtube);            
            musica.setNome(req.getParameter("nome"));
            musica.setArtista(req.getParameter("artista"));
            musica.setGenero(req.getParameter("genero"));


            //Cria nova instacia de MusicaDAO
            MusicaDAO musicaDAO = new MusicaDAO();

            //Cadastra a musica no banco de dados
            musica = musicaDAO.cadastrar(musica);

            /*Verificar se a tag já existe*/

            //Cria nova instacia de TagDAO
            TagDAO tagDAO = new TagDAO();
            String[] tags;
            tags = req.getParameter("tag_nome").split(",");
            ArrayList<Tag> tags_da_musica = new ArrayList<Tag>();
            for (String nome_tag : tags) {
                
                Tag tag = tagDAO.obter(nome_tag);

                //se não existir cadastra a tag
                if (tag == null) {
                    tag = new Tag();
                    tag.setNome(nome_tag);
                    tag = tagDAO.cadastrar(tag);
                }
                
                //relaciona musica a tag
                tagDAO.relacionarTagAMusica(tag, musica);
               
                tags_da_musica.add(tag);
                
            }
            musica.setTags(tags_da_musica);

            //Manda o cara pra musica que foi cadastrad
            req.setAttribute("musica", musica);
            rd = req.getRequestDispatcher("musica.jsp");
        } catch (Exception e) {
            req.setAttribute("tag_nome", req.getParameter("tag_nome"));
            req.setAttribute("nome", req.getParameter("nome"));
            req.setAttribute("artista", req.getParameter("artista"));
            req.setAttribute("genero", req.getParameter("genero"));
            req.setAttribute("url_youtube", req.getParameter("url_youtube"));
            req.setAttribute("aviso", e.getMessage());
            rd = req.getRequestDispatcher("cadastro.jsp");
        } finally {
            rd.forward(req, res);
        }
    }

    public void ver(HttpServletRequest req, HttpServletResponse res) throws Exception {
        MusicaDAO musicaDAO = new MusicaDAO();
        Musica musica = musicaDAO.obter(Integer.parseInt(req.getParameter("id_musica")));

        req.setAttribute("musica", musica);
        RequestDispatcher rd = req.getRequestDispatcher("musica.jsp");
        rd.forward(req, res);
    }
}
